package cn.edu.ren.controller;

import cn.edu.ren.feign.IStudentFeign;
import cn.edu.ren.pojo.Student;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Collection;

/**
 * @PackageName: cn.edu.ren.controller
 * @ClassName: HystrixController
 * @Description:
 * @author: RZS
 * @date: 2021/6/27  11:09
 */
@RestController
@RequestMapping("/hystrix")
public class HystrixController {

    @Autowired
    private IStudentFeign studentFeign;

    @GetMapping("/find_all")
    public Collection<Student> findAll(){
        return studentFeign.findAll();
    }

    @GetMapping("/index")
    public String index(){
        return studentFeign.index();
    }

    @GetMapping("/hello/{id}")
    @HystrixCommand(fallbackMethod = "hystrixTest")
    public String callHole(@PathVariable Integer id){
        /**
         * 调用服务代码略
         * 这里只为显示效果
         */
        if(id == 1){
            throw new RuntimeException("服务调用失败...");
        }
        return "调用成功";
    }

    /**
     * hystrixTest方法的参数要跟注解的方法参数保持一致，否则会报错。
     * 而且两个方法必须要在同一个类中，由于在同一个类中，所以hystrixTest的修饰符没有限制
     * @return
     */
    private String hystrixTest(Integer id){
        return "服务调用失败，原因id=";
    }
}
